﻿//金额输入控件
//创建者：吕刚
//维护者：刘娟
//贡献者：向添兵
//最后更新时间：2009-12-22

//ID:控件ID
//MoneyPre: 小写金额前缀
//MoneyChsPre: 大写金额前缀
//HasUpper: 是否有大写金额控件
//UpperID: HasUpper为true时，大写金额控件的ID 
//Create: 是否创建控件（true:客户端js生成控件; false:使用服务端生成的控件）
//ParentID: 当Create=true，Parent是包含生成控件的父控件
//dname:Create=true时，生成控件在动态表格中的dname
function MoneyCtrl(ID,MoneyPre,MoneyChsPre, HasUpper,UpperID,Create,ParentID,dname)
{
	this.ID=ID;
	this.HasUpper=HasUpper;
	this.MoneyPre=MoneyPre;
	this.MoneyChsPre=MoneyChsPre;
	this.NormalID=UPM.Pre+ID+"_"+ID+"txtMoneyNormal"; 
	this.LowerID=UPM.Pre+ID+"_"+ID+"hdfMoneyLower";
	if(HasUpper){this.UpperID=UPM.Pre+UpperID;}
	this.Create=false;
	if(Create)
	{
		this.Create=true;
		this.Created=false;//在创建控件期间，禁止事件的触发
		this.Parent=gid(ParentID);
		this.Parent.innerHTML="<input dname='"+dname+"' id='"+this.NormalID+"' class='text' style='width:120px;text-align:right; padding:3px;' type='text'/><input type='hidden' dname='"+dname+"Hdf' id='"+this.LowerID+"' />";
		var n=this.Normal();
		this.NormalChangeHandler=function(){eval("MoneyCtrl_"+ID+".NormalChange()");};
	    n.attachEvent("onpropertychange", this.NormalChangeHandler);  
	    
	    this.NormalFocusHandler=function(){eval("MoneyCtrl_"+ID+".NormalFocus()");};
	    n.attachEvent("onfocus", this.NormalFocusHandler);  
	    this.NormalBlurHandler=function(){eval("MoneyCtrl_"+ID+".NormalBlur()");};
	    n.attachEvent("onblur", this.NormalBlurHandler);  
	    this.Created=true;
	}	
}

//由于页面刷新时控件会被更换，所以使用gid获取控件对象
//大写金额控件
MoneyCtrl.prototype.Upper=function(){return gid(this.UpperID);}
//金额显示控件
MoneyCtrl.prototype.Normal=function(){return gid(this.NormalID);}
//小写金额隐藏控件
MoneyCtrl.prototype.Lower=function(){ return gid(this.LowerID);}

//金额显示控件的onpropertychagne事件处理，确保输入的是数字，并将输入的金额拷贝到小写隐藏控件和大写金额控件
MoneyCtrl.prototype.NormalChange=function()
{//console.log("blur"+(m++));
	if(this.Create && !this.Created) return;//动态创建期间，禁止事件触发
	if(event.propertyName!="value") return;
	var n=this.Normal();var l=this.Lower();
	if(!n.hasFoucs) return;//如果是失去焦点后的改变，是转为显示的情况，不处理
	
	//处理为空的特殊情况
	if(n.value=='') 
	{
		l.value='';
		if(this.HasUpper){this.Upper().value='';} 
		return;
	}
	
	NumberInput();//确保输入的是数字
	var v=n.value;//拷贝到小写
	this.Lower().value=v;	
	if(this.HasUpper)//拷贝到大写
	{
		var u=this.Upper();
		AmountInWords(Number(v),this.UpperID);
		u.value=this.MoneyChsPre+u.value;
	}
}

//金额显示控件的onfocus事件处理，将友好显示转换为数字显示
MoneyCtrl.prototype.NormalFocus=function()
{//console.log("foucs"+(m++));
	var n=this.Normal();var l=this.Lower();
	n.value=l.value;
	n.hasFoucs=true;
	if(this.AfterFocus) this.AfterFocus();
}
//金额显示控件的onfocus事件处理，将数字转换为友好的显示方式
MoneyCtrl.prototype.NormalBlur=function()
{//console.log("foucs"+(m++));
	var n=this.Normal();var l=this.Lower();
	n.hasFoucs=false;
		
	//处理为空的特殊情况
	if(n.value=='') 
	{
		n.OldValue='';l.value='';
		if(this.HasUpper){this.Upper().value='';} 
		return;
	}
	
	var normalMoney=formatNum(Number(n.value),2);
	n.value=this.MoneyPre+normalMoney;
	if(this.AfterBlur) this.AfterBlur();
}

//去除控件的事件响应功能，变为只读性质
MoneyCtrl.prototype.RemoveEvents=function()
{
	var n=this.Normal();
	n.detachEvent('onpropertychange',this.NormalChangeHandler);
	n.detachEvent("onfocus", this.NormalFocusHandler);
	n.detachEvent("onblur", this.NormalBlurHandler);  
}

//检查小写金额隐藏控件是否有值
MoneyCtrl.prototype.CheckData=function()
{
	var l=this.Lower();
	if(l.value=="")
	{
		this.Normal().focus();
		return false;
	}
	return true;
}	